package com.irdstudio.efp.flow.service;

import com.irdstudio.efp.flow.common.vo.PageApproveVO;

/**
 * 
 * 
 * 
 * @author Cytus_
 * @since 2018年5月12日 上午10:39:52
 * @version 1.0
 *
 */
public interface FlowEngine {
	
	/**
	 * 初始化流程
	 * @param flowId
	 * @return
	 * @throws Exception
	 */
	public String initBizFlow(String flowId, String bizLegalOrgCode)  throws Exception ;
	
	/**
	 * 启动事件
	 * @param flowId 流程ID
	 * @param eventId 事件ID
	 * @param g_bizSerno 全局流水号
	 * @param e_bizSerno 业务流水号
	 * @param bizLegalOrgCode 业务所属法人机构代码
	 * @param object 初始化传入参数
	 * @param isSync 是否同步启动
	 * @return 同步启动：返回最后一个节点最后一个任务的出参； 异步启动：返回业务流水号
	 * @throws Exception
	 */
	public Object startEvent(String flowId, String eventId, String g_bizSerno, String e_bizSerno, String bizLegalOrgCode, Object object, boolean isSync) throws Exception ;
	
	/**
	 * 继续当前事件
	 * @param g_bizSerno 全局流水号
	 * @param e_bizSerno 业务流水号
	 * @param eventId 事件ID
	 * @param vo 页面审批信息(暂不使用)
	 * @param object 继续时传入参数
	 * @param isSync 是否同步启动
	 * @return 同步启动：返回最后一个节点最后一个任务的出参； 异步启动：无返回
	 * @throws Exception
	 */
	public Object continueEvent(String g_bizSerno, String e_bizSerno, String eventId, PageApproveVO vo, Object object, boolean isSync) throws Exception;
	
	
	/**
	 * 执行事件，完成后将下一事件修改为暂停状态，主要用于页面插件提交
	 * @param g_bizSerno 全局流水号
	 * @param e_bizSerno 业务流水号
	 * @param eventId 事件ID
	 * @param instNodeId 实例化节点ID
	 * @param taskId 任务ID
	 * @param object 传入参数
	 * @return 执行是否成功
	 * @throws Exception
	 */
	public boolean executeTask(String g_bizSerno, String e_bizSerno, String eventId, String instNodeId, String taskId, Object object) throws Exception;
	
	

}
